/*
 * Copyright (c) 2025 Industrial Software Feature Database
 */
package com.comac.ins.isfd.util;

import com.comac.ins.common.core.exception.base.BaseException;
import com.comac.ins.common.core.utils.StringUtils;
import lombok.extern.slf4j.Slf4j;

import java.util.HashSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;

@Slf4j
public class CommonUtils {

    /**
     * 判断列表中是否有重复元素
     */
    public static boolean hasDuplicates(List<Long> list) {
        Set<Long> set = new HashSet<>(list);
        return set.size() < list.size();
    }

    /**
     * 找到列表中的第一个重复元素
     */
    public static Optional<Long> findFirstDuplicate(List<Long> list) {
        Set<Long> seen = new HashSet<>();
        return list.stream()
            .filter(n -> !seen.add(n))
            .findFirst();
    }


    /**
     * 型材属性号生成规则
     * 如果长度大于等于8，直接返回原字符串。
     * 如果长度小于8，则在字符串的右侧用'0'补齐到8位。
     */
    public static String padToEightDigits(String numberStr) {
        if (StringUtils.isBlank(numberStr)) {
            throw new BaseException("必传参数缺失，请确认后重试！");
        }

        int length = numberStr.length();
        if (length >= 8) {
            return numberStr;
        } else {
            return String.format("%-8s", numberStr).replace(' ', '0');
        }
    }

    /**
     * 字符串转数字，并自增加1
     */
    public static String numberIncrementOne(String oldAttributeNumber) {
        try {
            int numericValue = Integer.parseInt(oldAttributeNumber);
            numericValue++;
            return String.valueOf(numericValue);
        } catch (NumberFormatException e) {
            log.error("字符串转换数字失败，请确认后重试！", e);
            throw new BaseException("字符串转换数字失败，请确认后重试！");
        }
    }

    /**
     * 获取字符串前N个字符，不足补零
     */
    public static String getFirstNChars(String str, int n) {
        if (str == null) {
            return String.format("%0" + n + "d", 0);
        }

        if (str.length() >= n) {
            return str.substring(0, n);
        } else {
            return String.format("%-" + n + "s", str).replace(' ', '0');
        }
    }

    /**
     * 获取数字的后两位
     */
    public static String getLastTwoDigits(Double number) {
        if (number == null) {
            return "00";
        }

        int intValue = number.intValue();
        int lastTwo = intValue % 100;
        return String.format("%02d", lastTwo);
    }

    // 测试代码
    public static void main(String[] args) {
        System.out.println(padToEightDigits("123"));      // 输出: 12300000
        System.out.println(padToEightDigits("12345678")); // 输出: 12345678
        System.out.println(padToEightDigits("123456789"));// 输出: 123456789
    }
}
